//package com.demo.code;
//
//import org.junit.jupiter.api.Test;
//import org.tmatesoft.svn.core.SVNDepth;
//import org.tmatesoft.svn.core.SVNException;
//import org.tmatesoft.svn.core.SVNURL;
//import org.tmatesoft.svn.core.internal.io.svn.SVNRepositoryFactoryImpl;
//import org.tmatesoft.svn.core.internal.wc.DefaultSVNOptions;
//import org.tmatesoft.svn.core.wc.ISVNOptions;
//import org.tmatesoft.svn.core.wc.SVNClientManager;
//import org.tmatesoft.svn.core.wc.SVNDiffClient;
//import org.tmatesoft.svn.core.wc.SVNRevision;
//import org.tmatesoft.svn.core.wc.SVNStatus;
//import org.tmatesoft.svn.core.wc.SVNWCUtil;
//
//import java.io.File;
//import java.util.List;
//
//public class StatisticSvnCodeNum {
//
//    @Test
//    public void test() {
//        // 初始化数据
//        String localPath = "/opt/code"; //本地存放代码地址
//        String svnUrl = "https://127.0.0.1:9999/svn/code";//git远程地址
//        String username = "admin";//SVN远程地址账户
//        String password = "admin";//SVN远程地址密码
//
//
//        // 初始化支持svn://协议的库。 必须先执行此操作。
//        SVNRepositoryFactoryImpl.setup();
//        // 相关变量赋值
//        SVNURL repositoryURL = null;
//        try {
//            repositoryURL = SVNURL.parseURIEncoded(svnUrl);
//        } catch (Exception e) {
//
//        }
//        ISVNOptions options = SVNWCUtil.createDefaultOptions(true);
//        // 实例化客户端管理类
//        SVNClientManager clientManager = SVNClientManager.newInstance((DefaultSVNOptions) options, username, password);
//
//        // 1.首先将代码克隆到本地/opt/code目录下 (克隆位置自行选择)
//        File wcDir = new File(localPath);
//        SVNWCUtil.createDefaultAuthenticationManager(clientManager, repositoryURL, SVNRevision.HEAD, wcDir,
//                SVNDepth.INFINITY);
//
//        // 2.获取两次版本的id
//        //记录第一次拉取的版本
//        long oldVersion = getVersion(localPath);
//        //更新本地代码（SVN仓库最新的代码）
//        SVNUtil.update(clientManager, wcDir, SVNRevision.HEAD, SVNDepth.INFINITY);
//        //记录第二次拉取的版本
//        long newVersion = getVersion(localPath);
//
//        //3. 比较不同版本之间的差异文件
//        try {
//            SVNDiffClient diffClient = clientManager.getDiffClient();
//            SVNDiffStatusHandler diffStatusHandler = new SVNDiffStatusHandler();
//            diffClient.doDiffStatus(SVNURL.parseURIEncoded(svnUrl), SVNRevision.create(oldVersion),SVNURL.parseURIEncoded(svnUrl) , SVNRevision.create(newVersion), SVNDepth.INFINITY, false, diffStatusHandler);
//            List<String> diffFiles = diffStatusHandler.getPathList();
//            if (!diffFiles.isEmpty()) {
//                for (String diffFile : diffFiles) {
//                    System.out.println("差异文件：" + diffFile);
//                    //后续逻辑根据具体需求，自行添加
//                }
//            }
//        } catch (SVNException e) {
//            e.printStackTrace();
//        }
//    }
//
//    /**
//     * 获取代码的最新提交ID
//     */
//    private static long getVersion(String srcPath) {
//        SVNClientManager svnClientManager = SVNClientManager.newInstance(new DefaultSVNOptions());
//        SVNStatus svnStatus = null;
//        try {
//            svnStatus = svnClientManager.getStatusClient().doStatus(new File(srcPath), false);
//        } catch (SVNException e) {
//            e.printStackTrace();
//        }
//        return svnStatus.getRevision().getNumber();
//
//        // 原文链接：https://blog.csdn.net/m0_54408592/article/details/131844092
//    }
//
//}
